package io.lvdaxian.mybatis17.plugin;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 拦截器链
 *
 * @author lihh
 */
public class InterceptorChain {
  
  // 放 拦截器 的集合
  private final List<Interceptor> interceptors = new ArrayList<>();
  
  /**
   * 插件的执行
   *
   * @param target 执行插件的传递的对象
   * @return 这是返回新对象
   * @author lihh
   */
  public Object pluginAll(Object target) {
    // interceptors 这个是 实现接口【Interceptor】 的所有实现类
    for (Interceptor interceptor : interceptors) {
      // 从这里执行 插件
      target = interceptor.plugin(target);
    }
    return target;
  }
  
  /**
   * 添加 拦截器
   *
   * @param interceptor 拦截器
   * @author lihh
   */
  public void addInterceptor(Interceptor interceptor) {
    interceptors.add(interceptor);
  }
  
  /**
   * 拿到 拦截器集合
   *
   * @return 拦截器集合
   * @author lihh
   */
  public List<Interceptor> getInterceptors() {
    return Collections.unmodifiableList(interceptors);
  }
}
